﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Net.NetworkInformation;
using System.IO;
using PTS.Service;
using log4net;
namespace DSC
{
    public partial class Main : ComponentFactory.Krypton.Toolkit.KryptonForm
    {
        private static readonly ILog _logger = LogManager.GetLogger(typeof(Main).Name);
        public Main()
        {
            InitializeComponent();
            //CheckPermission();
            SessionLogin.CheckPermission(this.Name, pnlMenu);
            //neu co phan quyen cho tim kiem ticket thi moi mo giao dien nay len
            if(btnRepairtTicket.Enabled)
                ShowControl(new ucServiceBill(), "Tìm kiếm");
            this.FormClosing += new FormClosingEventHandler(Main_FormClosing);
        }
        
        public void ShowStatusMessage(string message)
        {
            statuslabel.Text = message;
            StatusProgress.Value = 50;
            statuslabel.Visible = true;
            StatusProgress.Visible = true;
        }
        public void EndShowStatusMessage()
        {
            statuslabel.Text = "";
            StatusProgress.Value = 0;
            statuslabel.Visible = false;
            StatusProgress.Visible = false;
        }
        void Main_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!(MessageBox.Show("Bạn thật sự muốn thoát khỏi chương trình", "Cảnh báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes))
            {
                e.Cancel = true;
            }
        }
        public void ShowControl(UserControl ctl, string title)
        {
            TabStopMenu(true);
            if (ctl is AfUserControl)
            {
                ((AfUserControl)ctl).ParentForm = this;
            }
             
            //neu da co tab nay roi thi mo lai, khong mo tab moi
            if (!title.Contains( "Thêm phiếu" ))
            {
                foreach (TabPage tmp in tabForm.TabPages)
                {
                    if (tmp.Text == title)
                    {
                        tabForm.SelectedTab = tmp;
                        return;
                    }
                }
            }
            if (tabForm.TabPages.Count >= 10)
            {
                MessageBox.Show("Vui lòng đóng bớt ta. Số tab tối đa là 10.", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            ShowControlThread(ctl, title);     
        }
        private void ShowControlThread(UserControl ctl, string title)
        {
            TabPage tab1 = new TabPage();
            ContextMenu mnu = new ContextMenu();
            mnu.MenuItems.Add("Đóng");
            mnu.MenuItems[0].Click += new EventHandler(Main_Click);
            mnu.MenuItems[0].Tag = tab1;
            tab1.ContextMenu = mnu;

            tab1.Text = title;
            tab1.Controls.Add(ctl);
            ctl.Dock = DockStyle.Fill;
            tabForm.TabPages.Add(tab1);
            tabForm.SelectedTab = tab1;
        }

        void Main_Click(object sender, EventArgs e)
        {

            tabForm.Controls.Remove((sender as MenuItem).Tag as TabPage);
        }
        private void ShowControl(UserControl ctl)
        {
         //   pnlBody.Controls.Clear();
        //    pnlBody.Controls.Add(ctl);
         //   ctl.Dock = DockStyle.Fill;
        }

        private void btnRepairTicket_Click(object sender, EventArgs e)
        {
           // ShowControl(new ucBillTicketList("SC"));
            ShowControl(new ucServiceBill(),"Tìm kiếm");
        }

        private void btnReport_Click(object sender, EventArgs e)
        {
            //ShowControl(new ucReport());
            ShowControl(new ucReport(),"Báo cáo");
        }
        private void btnLicense_Click(object sender, EventArgs e)
        {
            frmIntroduce frm = new frmIntroduce();
            frm.ShowDialog();
        }

        private void btCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btHistory_Click(object sender, EventArgs e)
        {
           // ShowControl(new ucActionHistory());
            ShowControl(new ucActionHistory(),"Lịch sử truy cập");
        }

        private void btIndexList_Click(object sender, EventArgs e)
        {
            //ShowControl(new ucMenu());
            ShowControl(new ucMenu(),"Danh mục");
        }

        private void btSynchro_Click(object sender, EventArgs e)
        {
//            ShowControl(new SynchroDataPTMV());
            ShowControl(new SynchroDataPTMV(),"Đồng bộ dữ liệu");
        }

        private void btAddTicket_Click(object sender, EventArgs e)
        {
            //frmBill frm = new frmBill();
            //frm.Show();
            ShowControl(new ucBill(),"Thêm phiếu");
            TabStopMenu(false);
        }

        
        protected void TabStopMenu(bool isTabStop)
        {
            btnRepairtTicket.TabStop = isTabStop;
            btAddTicket.TabStop = isTabStop;
            btnReport.TabStop = isTabStop;
            btIndexList.TabStop = isTabStop;
            btHistory.TabStop = isTabStop;
            btSynchro.TabStop = isTabStop;
            btnLicense.TabStop = isTabStop;
            btCancel.TabStop = isTabStop;
        }
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.F6) // hien thi tìm kiếm
            {
                ShowControl(new ucServiceBill(), "Tìm kiếm");
                return true;
            }
            if (keyData == Keys.F7) // hien thi form them phieu dich vu
            {
                btAddTicket_Click(this, null);
                return true;
            }
            if (keyData == Keys.F8) // hien thi form sua
            {
                ShowControl(new ucReport(), "Báo cáo");
                return true;
            }
            if (keyData == Keys.F9) // hien thi form danh mục
            {
                ShowControl(new ucMenu(), "Danh mục");
                return true;
            }
            if (keyData == Keys.F10) // hien thi form lịch sử truy cập
            {
                ShowControl(new ucActionHistory(), "Lịch sử truy cập");
                return true;
            }
            if (keyData == Keys.F11) // hien thi form đồng bộ dữ liệu
            {
                ShowControl(new SynchroDataPTMV(), "Đồng bộ dữ liệu");
                return true;
            }
            if (keyData == Keys.F12) // hien thi form license
            {
                frmIntroduce frm = new frmIntroduce();
                frm.ShowDialog();
                return true;
            }
            if (keyData == Keys.Escape) // Thoát
            {
                if (tabForm.TabPages.Count>1 && tabForm.SelectedTab != null)
                    tabForm.Controls.Remove(tabForm.SelectedTab);
                return true;
            }
           
            return base.ProcessCmdKey(ref msg, keyData);
        }

        private void tabForm_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (tabForm.SelectedTab == null)
                return;
            if (tabForm.SelectedTab.Text.Contains("Thêm phiếu") || tabForm.SelectedTab.Text.Contains("Sửa phiếu"))
            {
                TabStopMenu(false);
            }
            else
                TabStopMenu(true);
        }

        private void btUpdate_Click(object sender, EventArgs e)
        {
            ShowStatusMessage("Đang cập nhật phiên bản mới");
            Thread t = new Thread(new ThreadStart(Update));
            t.Start();
        }
        private void Update()
        {
            this.Invoke((MethodInvoker)delegate
            {
                btUpdate.Enabled = false;
            });
            try
            {
                GPDN.SERVICE.PTS.pts sObj = new DSC.GPDN.SERVICE.PTS.pts();
                StreamReader sr = new StreamReader(Application.StartupPath + "/vr.dat");
                if (sObj.checkUpdate(int.Parse(sr.ReadLine().Replace(".", "").Trim())))
                {
                    DialogResult rs = MessageBox.Show("Đã có phiên bản mới. Bạn có muốn cập nhật không?", "Thông báo", MessageBoxButtons.YesNo);
                    if (rs == DialogResult.Yes)
                    {
                        //Download cac file co trong thu muc server
                        GPDN.SERVICE.PTS.FileContent[] lstFile = sObj.Download();
                        for (int i = 0; i < lstFile.Length; i++)
                        {
                            try
                            {
                                //luu cac file cua server ve client                        
                                string fileClient = Application.StartupPath + "/" + lstFile[i].FileName;
                                System.IO.FileStream fileStream = new FileStream(fileClient, FileMode.Create);
                                fileStream.Write(lstFile[i].Content, 0, lstFile[i].Content.Length);
                                fileStream.Close();
                                PTS.Service.AfitFile.ZipDeCompressFolder(Application.StartupPath + "/pts.zip", Application.StartupPath);
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show("Cập nhật phiên bản mới không thành công. Vui lòng thử lại !");
                                this.Invoke((MethodInvoker)delegate
                                {
                                    EndShowStatusMessage();
                                    btUpdate.Enabled = true;
                                });
                                _logger.Error(ex.Message);
                                return;
                            }
                        }
                        if (MessageBox.Show("Hệ thống sẽ khởi động lại để cập nhật phiên bản mới!", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {
                            this.Invoke((MethodInvoker)delegate
                            {
                                EndShowStatusMessage();
                                btUpdate.Enabled = true;
                                this.Close();
                                System.Diagnostics.Process.Start("DSCUpdate.exe");
                            });
                        }
                        else {
                            this.Invoke((MethodInvoker)delegate
                            {
                                EndShowStatusMessage();
                                btUpdate.Enabled = true;
                            });
                        }
                    }
                    else
                    {
                        this.Invoke((MethodInvoker)delegate
                        {
                            EndShowStatusMessage();
                            btUpdate.Enabled = true;
                        });
                    }
                }
                else
                {
                    this.Invoke((MethodInvoker)delegate
                    {
                        EndShowStatusMessage();
                        btUpdate.Enabled = true;
                    });
                    MessageBox.Show("Phiên bản bạn đang sử dụng hiện tại là mới nhất.");   
                }
            }
            catch (Exception ex1)
            {
                MessageBox.Show("Cập nhật phiên bản mới không thành công. Vui lòng thử lại!");
                this.Invoke((MethodInvoker)delegate
                {
                    EndShowStatusMessage();
                    btUpdate.Enabled = true;
                });
                _logger.Error(ex1.Message);
            }
        }
    }
}
